البرمجة

تنشيط واجهة مدير جانغو

جدول المحتوى

مقدّمة

تُعَدّ ‫إطار عمل «جانغو» (Django) واحداً من أكثر أُطر تطوير تطبيقات الويب شعبيةً في لغة بايثون لما يوفّره من أدوات جاهزة، أمانٍ افتراضي، وبنيةٍ صلبة تدفع بالمطوّر إلى التركيز على منطق الأعمال بدلاً من إعادة اختراع العجلة. ومن أبرز ميزاته واجهة «مدير جانغو» (Django Admin) التي تُنشأ تلقائياً وتمنح فريق التطوير ولوحة المحتوى وصولاً مركزياً لإدارة النماذج، المستخدمين، الصلاحيات، وأنشطة الموقع. يهدف هذا المقال المطوّل إلى تقديم دليل شامل وعملي لتنشيط واجهة المدير والاتصال بها، مقسَّماً إلى خطوات متسلسلة تبدأ من التثبيت وتهيئة المشروع وتنتهي بتخصيص الواجهة وتوسيعها. يَرُكّز المحتوى على التفاصيل التقنية الدقيقة، أفضل الممارسات، المشكلات الشائعة وأساليب معالجتها، مع الحرص على الالتزام بالقواعد القياسية لتحسين محرك البحث (SEO) عبر استخدام الترويسات والعناوين الفرعية الوصفية، الروابط الداخلية والخارجية حين يلزم، إضافةً إلى جدولٍ موجز يلخّص إعدادات الصلاحيات الأكثر استخداماً.


1. إنشاء بيئة افتراضية وتثبيت جانغو

1.1 أهمية البيئة الافتراضية

تضمن البيئة الافتراضية عزلاً بين المشاريع المختلفة، وتتيح تثبيت تبعيات محدَّدة دون تأثير على النظام. لاستحداثها:

bash
python -m venv venv source venv/bin/activate # على لينكس/ماك venv\Scripts\activate # على ويندوز

1.2 تثبيت جانغو

bash
pip install django

للتحقق:

bash
python -m django --version

2. إنشاء مشروع جانغو

bash
django-admin startproject mysite cd mysite python manage.py migrate # يولّد قاعدة البيانات الافتراضية SQLite

بعد الهجرة الأُولى يُصبح المشروع جاهزاً لاستقبال تطبيقات فرعية وتجهيز المدير.


3. إنشاء مستخدم «مشرف» (SuperUser)

bash
python manage.py createsuperuser

يُطلَب بريد إلكتروني، اسم مستخدم، كلمة مرور. هذا الحساب يمتلك جميع الصلاحيات ويمكّن من الولوج إلى واجهة المدير.


4. تشغيل الخادم التطويري

bash
python manage.py runserver

افتراضيّاً يُستمع على http://127.0.0.1:8000/، فيما تتوفّر واجهة المدير على /admin/.


5. بنية جانغو الداخلية وأثرها على واجهة المدير

5.1 ملفات الإعداد settings.py

  • INSTALLED_APPS: تتضمن التطبيقات الأساسية مثل django.contrib.admin، auth، contenttypes. وجود admin شرط جوهري لتفعيل الواجهة.

  • MIDDLEWARE: طبقات الحماية وجلسات العمل ضرورية لدخول المستخدم وتخزين بيانات الجلسة.

5.2 ملف العناوين urls.py

python
from django.contrib import admin from django.urls import path, include urlpatterns = [ path('admin/', admin.site.urls), ]

يجب تضمين مسار admin/ حتى تُصبح الصفحة قابلة للوصول.


6. تسجيل النماذج في لوحة المدير

6.1 إنشاء تطبيق

bash
python manage.py startapp blog

6.2 تعريف نموذج

python
# blog/models.py from django.db import models class Article(models.Model): title = models.CharField(max_length=200) body = models.TextField() created = models.DateTimeField(auto_now_add=True) def __str__(self): return self.title

6.3 إضافة التطبيق إلى INSTALLED_APPS

python
INSTALLED_APPS = [ ... 'blog.apps.BlogConfig', ]

6.4 إنشاء الهجرات وتطبيقها

bash
python manage.py makemigrations python manage.py migrate

6.5 تسجيل النموذج في المدير

python
# blog/admin.py from django.contrib import admin from .models import Article admin.site.register(Article)

عند الدخول إلى /admin ببيانات المشرف، سيظهر قسم Blog ثم Articles.


7. تخصيص واجهة المدير

7.1 تحسين العرض باستخدام ModelAdmin

python
class ArticleAdmin(admin.ModelAdmin): list_display = ('title', 'created') search_fields = ('title',) list_filter = ('created',) admin.site.register(Article, ArticleAdmin)

يوفّر ذلك بحثاً سريعاً، فلاتر بالشريط الجانبي، وعرضاً مُخصّصاً للأعمدة.

7.2 تغيير عنوان الموقع والشعار

python
# mysite/settings.py أو ملف مستقل from django.contrib import admin admin.site.site_header = "لوحة إدارة موقعي" admin.site.index_title = "إدارة المحتوى" admin.site.site_title = "لوحة التحكم"

7.3 إضافة ملفات CSS وJS مخصّصة

  1. أنشئ مجلّد static/admin/css/ أو static/admin/js/.

  2. ضمن ModelAdmin:

python
class ArticleAdmin(admin.ModelAdmin): class Media: css = {'all': ('admin/css/custom.css',)} js = ('admin/js/custom.js',)

8. نظام الصلاحيات والمجموعات

8.1 المفهوم العام

يستند جانغو إلى نموذج auth الذي يُنشئ جداول User و Group و Permission. لكل نموذج أربعة أذونات أساسية: إضافة، تغيير، حذف، عرض.

8.2 إنشاء مجموعة وتعيين صلاحيات

python
from django.contrib.auth.models import Group, Permission from django.contrib.contenttypes.models import ContentType from blog.models import Article editors, _ = Group.objects.get_or_create(name='Editors') ct = ContentType.objects.get_for_model(Article) perms = Permission.objects.filter(content_type=ct, codename__in=['add_article','change_article','view_article']) editors.permissions.set(perms)

8.3 ربط مستخدم بمجموعة

python
user.groups.add(editors)

جدول (1): أمثلة لأدوار شائعة وصلاحياتها الأساسية

الدور النماذج المستهدَفة الصلاحيات
مشرف عام جميع النماذج إضافة، تغيير، حذف، عرض
محرِّر محتوى Article إضافة، تغيير، عرض
مراجع قانوني Article عرض فقط
مدير مستخدمين User, Group إضافة، تغيير، حذف، عرض

9. حماية واجهة المدير في بيئة الإنتاج

9.1 استخدام تشفير HTTPS

إعداد شهادة TLS عبر Let’s Encrypt أو مزود آخر، وتوجيه الخادم (nginx أو Apache) لإعادة توجيه HTTP إلى HTTPS.

9.2 تغيير المسار الافتراضي

python
urlpatterns = [ path('secure-console/', admin.site.urls), ]

يقلّل ذلك من محاولات التخمين الآلي.

9.3 تقييد الوصول بعناوين IP

في nginx:

nginx
location /secure-console/ { allow 192.168.1.0/24; deny all; proxy_pass http://unix:/run/gunicorn.sock; }

9.4 تفعيل المصادقة بعاملين (2FA)

يمكن توسيع جانغو عبر حزمة django-otp أو django-two-factor-auth لإضافة رموز لمرة واحدة.


10. توصيل واجهة المدير بواجهات أخرى

10.1 استهلاك الـ API عبر Django REST Framework

تسجيل النموذج نفسه في واجهة REST يتيح تعاملاً غير تفاعلي مع البيانات:

python
from rest_framework import viewsets, routers from blog.models import Article from blog.serializers import ArticleSerializer class ArticleViewSet(viewsets.ModelViewSet): queryset = Article.objects.all() serializer_class = ArticleSerializer router = routers.DefaultRouter() router.register(r'articles', ArticleViewSet) urlpatterns += [ path('api/', include(router.urls)), ]

10.2 الربط بلوحة Grafana للمراقبة

  • تنصيب django-prometheus لتصدير مقاييس.

  • إعداد Grafana للجمع من  Prometheus ومراقبة الاستعلامات.


11. توسيع المدير عبر إجراءات مخصّصة

python
@admin.action(description="تمييز كمُراجع") def mark_reviewed(modeladmin, request, queryset): queryset.update(status='reviewed') class ArticleAdmin(admin.ModelAdmin): actions = [mark_reviewed]

توفّر الإجراءات إمكانية تنفيذ عمليات جماعية دون مغادرة الواجهة.


12. اختبار واجهة المدير

12.1 اختبارات وحدة

python
from django.test import TestCase from django.urls import reverse from django.contrib.auth.models import User class AdminAccessTest(TestCase): def setUp(self): self.user = User.objects.create_superuser('admin','[email protected]','pwd') def test_admin_login(self): self.client.login(username='admin', password='pwd') response = self.client.get(reverse('admin:index')) self.assertEqual(response.status_code, 200)

12.2 اختبارات تكامل باستخدام Selenium

… إلخ.


13. المشكلات الشائعة وحلولها

المشكلة الرسالة الحل
CSRF verification failed Missing CSRF token تأكد من تفعيل الوسيط CsrfViewMiddleware أو استخدام @csrf_exempt عند الضرورة
404 عند /admin Page not found تحقق من مسار admin/ في urls.py
Static files not loading 403/404 إعداد STATIC_URL, STATIC_ROOT وتجميع الملفات عبر collectstatic

14. اعتبارات الأداء

  • تفعيل التخزين المؤقت للقوالب (Template Caching).

  • استخدام قاعدة بيانات مخصّصة للقراءة عند الأحمال العالية.

  • ضبط select_related و prefetch_related لتقليل الاستعلامات المتكررة.


15. الخاتمة

توفّر واجهة «مدير جانغو» نظاماً متكاملاً لإدارة المحتوى، المستخدمين، والأذونات دون الحاجة إلى بناء لوحة تحكم من الصفر. يبدأ تفعيلها بإضافة التطبيق admin إلى الإعدادات، إنشاء مستخدم مشرف، وتسجيل النماذج. بعدها يمكن توسيعها بسهولة عبر تخصيص ModelAdmin، دمج ملفات العرض الخاصة، وإضافة الإجراءات المخصّصة. في بيئات الإنتاج يصبح تأمين المسار، فرض HTTPS، وتفعيل المصادقة بعاملين خطوات غير قابلة للتفاوض للحفاظ على سلامة البيانات. أخيراً يبقى الاختبار المستمر، المراقبة، وتحسين الأداء عوامل رئيسة لضمان تجربة إدارة مستقرة وآمنة.


المراجع

  1. الوثائق الرسمية لإطار Django – الإصدار 5.0.‏

  2. حزمة Django REST Framework – دليل الاستخدام.